package com.example.app.manager

import java.math.RoundingMode
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
import java.util.Locale
import kotlin.math.abs

/**
 * 对大数字的显示处理
 */
object BigNumManager {

    fun formatNumber(number: Double): String {
        // 定义阈值和对应的单位
        val units = arrayOf("", "K", "M", "B")
        val thresholds = intArrayOf(1, 1000, 1000000, 1000000000)

        // 找到合适的单位
        var unitIndex = 0
        for (i in thresholds.indices.reversed()) {
            if (abs(number) >= thresholds[i]) {
                unitIndex = i
                break
            }
        }

        val digit = if (number > 10000) 2 else 1
        // 计算格式化后的数字
        val formattedNumber = number / thresholds[unitIndex]
        // 使用 DecimalFormat 格式化数字，保留一位小数
        val formattedString = saveDecimal(formattedNumber, digit)
        // 添加单位
        return formattedString + units[unitIndex]
    }


    /**
     * 对入参保留最多两位小数(舍弃末尾的0)，如:
     * 3.345->3.34
     * 3.40->3.4
     * 3.0->3
     */
    private fun saveDecimal(number: Double, digit: Int, mode: RoundingMode = RoundingMode.HALF_UP): String {
        val pattern = "0.${"#".repeat(digit)}"
        val format = DecimalFormat(pattern, DecimalFormatSymbols.getInstance(Locale.ENGLISH))
        //未保留小数的舍弃规则，RoundingMode.FLOOR表示直接舍弃。
        format.roundingMode = mode
        return format.format(number)
    }


}